Property injection uses @Inject() directly on a class property instead of in the constructor. The property is undefined during the constructor body. It is useful for base classes in inheritance hierarchies to avoid passing all dependencies through super(). Constructor injection is preferred for all other cases.
Base classes in deep inheritance chains — avoids requiring every subclass to pass all base dependencies through super().
Avoid using it as a shortcut to skip constructor argument lists — that is a code smell.
Always prefer constructor injection for testability — property injection requires the full DI container to set the value.
Property-injected fields are undefined inside the constructor body — never use them there.